package com.example.work.utils;

import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class TokenUtils {
     // 定义密钥（使用安全的生成方式）
    private static final SecretKey SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);
    private static final String ISSUER = "Soybean";
    // 生成 JWT Token
    public static String generateToken(String userName, long expirationMillis) {
        return Jwts.builder()
                .setSubject(userName) // 设置主题（通常是用户名）
                .claim("data", new HashMap<String, String>() {{
                    put("userName", userName);
                }}) // 自定义数据
                .setIssuedAt(new Date()) // 签发时间
                .setExpiration(new Date(System.currentTimeMillis() + expirationMillis)) // 过期时间
                .setIssuer(ISSUER) // 签发者
                .signWith(SECRET_KEY) // 使用安全的密钥签名
                .compact();
    }
    // 解析token
//    public static Claims parseToken(String token){
//        Claims claims = Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody();
//        return claims;
//    }
    private static String parseToken(String authorizationHeader) {
        String token = authorizationHeader.substring(7); // 去掉 "Bearer " 前缀
        System.out.println(token);
        try {
            return Jwts.parserBuilder()
                    .setSigningKey(SECRET_KEY)
                    .build()
                    .parseClaimsJws(token)
                    .getBody()
                    .getSubject();// 获取用户名
        } catch (Exception e) {
            System.out.println("Token解析失败: " + e.getMessage());
            return null; // 解析失败返回 null
        }
    }
    public static String getUserNameFromToken(String token){
        return parseToken(token);
    }
}
